﻿using System;
using System.Collections.Generic;
using System.Text;

namespace FDSimpleModelGenerator.Aop
{
    /// <summary>
    /// Aop一般性操作
    /// </summary>
    public class AopOptions
    {
        /// <summary>
        /// 记录操作日志类型
        /// </summary>
        public AopLogType AopLogType { get; set; }

        /// <summary>
        /// 当AopLogType为MethodType时，需要指定需要记录日志的方法匹配项
        /// 逗号分隔，*xx 代表以xx为结尾方法名，xx*表示以xx为开关方法名
        /// [如果设置该项，则默认不生效，只有设置项才会拦截]
        /// </summary>
        public string LogForActionType { get; set; }

        /// <summary>
        /// 指定不需要记录日志的类型，仅当AopType为MethodType
        /// 逗号分隔，*xx 代表以xx为结尾方法名，xx*表示以xx为开关方法名
        /// 如果已设置<see cref="LogForActionType"/>，则忽略该项设置
        /// </summary>
        public string NonLogPredicates { get; set; }

        /// <summary>
        /// 操作前日志
        /// </summary>
        public bool LogActionBeforeCall { get; set; }

        /// <summary>
        /// 操作后日志
        /// </summary>
        public bool LogActionAfterCall { get; set; }

        /// <summary>
        /// 忽略接口的返回值日志
        /// 只记录实现类的结果（减少空间）
        /// </summary>
        public bool IgnoreResultForInterface { get; set; } = true;

    }

    /// <summary>
    /// 需要记录执行日志的类型
    /// </summary>
    public enum AopLogType
    {
        /// <summary>
        /// 指定AopAttribute特性
        /// </summary>
        AopAttribute,
        /// <summary>
        /// 指定方法类型
        /// </summary>
        MethodType,
        /// <summary>
        /// 不需要执行操作日志
        /// </summary>
        None
    }
}
